/*
Promise.prototype.catch()是一个 Promise 对象的实例方法，用于注册拒绝一个 promise 时的回调函数。
它等价于调用 Promise.prototype.then(undefined, onRejection)。
它可以用于捕捉在 Promise 链中任何位置上的拒绝操作，如果链中的某个 Promise 被拒绝，该方法会跳过 resolve 的回调并调用 catch 方法中的回调。
如果 Promise 链中没有捕获拒绝的机制，那么当 Promise 被拒绝时，控制台上将会打印未处理的错误，具体错误是什么取决于 Promise 被拒绝的原因。
使用 catch 方法，可以避免未处理的错误并对 Promise 被拒绝的原因进行处理并进行相应的恢复操作。
 */
// 本质就是then，只是少传了一个onFulfilled 所以仅处理失败的场景
Promise.prototype.catch = function(onRejected) {
    return this.then(null, onRejected);
}
let rejectedPromise = new Promise((resolve, reject) => {
    reject('Something went wrong!');
});
let rejectedPromise2 = new Promise((resolve, reject) => {
    resolve('Something went wrong!');
});
rejectedPromise
    // then可以在成功和失败时调用(两个参数) 而catch只捕获失败。
    // 即上一步then中已经处理了reject 返回一个Promise 这个promise呈pending状态 所以不会触发.catch
    .then(() => console.log('Resolved!'),() => console.log('我也能捕获错误'))
    .catch(error => console.log(`Rejected with error: ${error}`));
